using System;
using System.Runtime.InteropServices;

namespace CodePlex.ExtractedDataReorganizer
{
	/// <summary>
	/// Summary description for DragHelper.
	/// </summary>
	public class DragHelper
	{
		[DllImport("comctl32.dll")]
		public static extern bool InitCommonControls();

		[DllImport("comctl32.dll", CharSet=CharSet.Auto)]
		public static extern bool ImageList_BeginDrag(
			IntPtr himlTrack, // Handler of the image list containing the image to drag
			int iTrack,       // Index of the image to drag 
			int dxHotspot,    // x-delta between mouse position and drag image
			int dyHotspot     // y-delta between mouse position and drag image
			);

		[DllImport("comctl32.dll", CharSet=CharSet.Auto)]
		public static extern bool ImageList_DragMove(
			int x,   // X-coordinate (relative to the form,			// not the treeview) at which to display the drag image.
			int y   // Y-coordinate (relative to the form,			// not the treeview) at which to display the drag image.
			);

		[DllImport("comctl32.dll", CharSet=CharSet.Auto)]
		public static extern void ImageList_EndDrag();

		[DllImport("comctl32.dll", CharSet=CharSet.Auto)]
		public static extern bool ImageList_DragEnter(
			IntPtr hwndLock,  // Handle to the control that owns the drag image.
			int x,            // X-coordinate (relative to the treeview)
			// at which to display the drag image. 
			int y             // Y-coordinate (relative to the treeview)
			// at which to display the drag image. 
			);

		[DllImport("comctl32.dll", CharSet=CharSet.Auto)]
		public static extern bool ImageList_DragLeave(
			IntPtr hwndLock  // Handle to the control that owns the drag image.
			);

		[DllImport("comctl32.dll", CharSet=CharSet.Auto)]
		public static extern bool ImageList_DragShowNolock(
			bool fShow       // False to hide, true to show the image
			);

		static DragHelper()
		{
			InitCommonControls();
		}
	}
}
